package pe.gob.mintra.trabajadoreshogar.daoimpl;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;

import pe.gob.mintra.trabajadoreshogar.bean.Departamento;
import pe.gob.mintra.trabajadoreshogar.bean.DetalleMotivoCese;
import pe.gob.mintra.trabajadoreshogar.bean.Distrito;
import pe.gob.mintra.trabajadoreshogar.bean.MotivoCese;
import pe.gob.mintra.trabajadoreshogar.bean.NivelEducativo;
import pe.gob.mintra.trabajadoreshogar.bean.Provincia;
import pe.gob.mintra.trabajadoreshogar.bean.TipoDocumentoIdentidad;
import pe.gob.mintra.trabajadoreshogar.bean.TipoVia;
import pe.gob.mintra.trabajadoreshogar.bean.Zona;
import pe.gob.mintra.trabajadoreshogar.dao.MantenimientoDAO;
import pe.gob.mintra.trabajadoreshogar.factory.MyBatisConnectionFactory;

public class MantenimientoDAOImp implements MantenimientoDAO {

	private SqlSessionFactory sqlSessionFactory;
	private final static Logger logMantenimientoDAOImp = Logger.getLogger(MantenimientoDAOImp.class);


	public MantenimientoDAOImp() {
		sqlSessionFactory = MyBatisConnectionFactory.getSqlSessionFactory();
	}

	@Override
	public List<Departamento> listarDepartamento() {

		List<Departamento> lstDepartamento = new ArrayList<Departamento>();

		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstDepartamento = (List<Departamento>) session
					.selectList("Mantenimiento.listarDepartamento");
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstDepartamento;
	}

	@Override
	public List<Provincia> listarProvincia(Departamento objDepartamento) {
		List<Provincia> lstProvincia = new ArrayList<Provincia>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstProvincia = (List<Provincia>) session.selectList(
					"Mantenimiento.listarProvincia", objDepartamento);
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstProvincia;
	}

	@Override
	public List<Distrito> listarDistrito(Provincia objProvincia) {
		List<Distrito> lstDistrito = new ArrayList<Distrito>();
		SqlSession session = sqlSessionFactory.openSession();
	
		
		try{
			lstDistrito = (List<Distrito>) session.selectList(
					"Mantenimiento.listarDistrito", objProvincia);
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstDistrito;
	}

	@Override
	public List<TipoVia> listarTipoVia() {
		List<TipoVia> lstTipoVia = new ArrayList<TipoVia>();
		SqlSession session = sqlSessionFactory.openSession();
			
		
		try{
			lstTipoVia = (List<TipoVia>) session
					.selectList("Mantenimiento.listarTipoVia");
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}

		return lstTipoVia;
	}

	@Override
	public List<Zona> listarZona() {
		List<Zona> lstZona = new ArrayList<Zona>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{

			lstZona = (List<Zona>) session
					.selectList("Mantenimiento.listarZona");
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}

		return lstZona;
	}

	@Override
	public List<TipoDocumentoIdentidad> listarTipoDocumentoIdentidad() {
		List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad = new ArrayList<TipoDocumentoIdentidad>();
		SqlSession session = sqlSessionFactory.openSession();
	
		try{

			lstTipoDocumentoIdentidad = (List<TipoDocumentoIdentidad>) session
					.selectList("Mantenimiento.listarTipoDocumentoIdentidad");
			
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}

		return lstTipoDocumentoIdentidad;
	}

	@Override
	public List<MotivoCese> listarMotivoCese() {

		List<MotivoCese> lstMotivoCese = new ArrayList<MotivoCese>();

		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstMotivoCese = (List<MotivoCese>) session
					.selectList("Mantenimiento.listarMotivoCese");
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstMotivoCese;
	}

	@Override
	public List<DetalleMotivoCese> listarDetalleMotivoCese(MotivoCese objMotivoCese) {
		
		List<DetalleMotivoCese> lstDetalleMotivoCese = new ArrayList<DetalleMotivoCese>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstDetalleMotivoCese = (List<DetalleMotivoCese>) session.selectList(
					"Mantenimiento.listarDetalleMotivoCese", objMotivoCese);
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstDetalleMotivoCese;
	}

	@Override
	public List<TipoDocumentoIdentidad> listarTipoDocumentoIdentidadTrab() {
		List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad = new ArrayList<TipoDocumentoIdentidad>();
		SqlSession session = sqlSessionFactory.openSession();
	
		try{

			lstTipoDocumentoIdentidad = (List<TipoDocumentoIdentidad>) session
					.selectList("Mantenimiento.listarTipoDocumentoIdentidadTrab");
			
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}

		return lstTipoDocumentoIdentidad;
	}

	@Override
	public List<NivelEducativo> listarNivelEducativo() {
		List<NivelEducativo> lstNivelEducativo = new ArrayList<NivelEducativo>();

		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstNivelEducativo = (List<NivelEducativo>) session
					.selectList("Mantenimiento.listarNivelEducativo");
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstNivelEducativo;
	}

	@Override
	public List<Departamento> listarDepartamentoxCodigo(Departamento objDepartamento) {
		List<Departamento> lstDepartamento = new ArrayList<Departamento>();

		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstDepartamento = (List<Departamento>) session
					.selectList("Mantenimiento.listarDepartamentoxCodigo",objDepartamento);
		}catch(Exception ex){
			logMantenimientoDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstDepartamento;
	}
	
}
